iT邦幫忙

2023 iThome 鐵人賽

DAY 3
0
Software Development

Go朱尼爾的學習雜記系列 第 4

0x04 怎麼做 package 引入

  • 分享至 

  • xImage
  •  

前面 Hello World 過了, 然後會寫 function 了, 接下來介紹一下 package 的引入 (雖然順序有點奇妙, 不過筆者自己學新語言是這個順序在學xD )

Getting Started

1. 目前的程式碼

main.go

package main

import (
  "fmt"
)

func adder(a int, b int) int {
  return a + b
}

func sayHello(){
  fmt.Println("hello world")
}

func main(){
  // sayHello()
  fmt.Println( adder(3, 5) )
}

2. 新增另一個檔案 calculate.go

新增一個檔案 calculate.go (可以使用touch指令, 或vscode左邊界面滑鼠直接新增)
calculate.go

package main

func Sub(a int, b int) int {
  return a - b
}

說明:

  1. 我們在同個資料夾內新增了calculate.go, 並且定義了 func Sub(a int, b int) int
  2. 重點注意的是, 我們前面 adder 開頭小寫, 這邊 Sub開頭大寫, 這邊牽涉到物件導向的 public/private觀念, 在golang裡面, 小寫代表private 不希望別人使用, 大寫代表public 開放給人使用, 因此我們定義在不同檔案裡面的function, 要以大寫開頭表示public, 不然程式會無法執行

3. 修改 main.go, 呼叫執行 Sub函式

修改 main.go

package main

import (
  "fmt"
)

func adder(a int, b int) int {
  return a + b
}

func sayHello(){
  fmt.Println("hello world")
}

func main(){
  // sayHello()
  fmt.Println( adder(3, 5) )
  fmt.Println( Sub(10, 6))
}

4. 新增資料夾, 以確實了解模組系統

新增資料夾 pkg

mkdir pkg # mkdir 是 make directory 的意思, 是一個作業系統提供的指令, pkg可以自己更改, 但pkg是package的意思, 通常命名最好讓別人直接看得懂

將calculate移動到pkg資料夾內 (不熟指令的話也可以先手動)

mv calculate.go pkg # mv 是系統提供的指令, move的意思

此時的資料夾結構會像是

helloworld
  - main.go
  - pkg
    - calculate.go 

接下來修改 calculate.go內模組名稱
calculage.go

package pkg

func Sub(a int, b int) int {
  return a - b
}

說明:這邊模組 package pkg, pkg可以自訂, 個人是習慣跟資料夾一樣, 這邊沒有強制規定

接著修改 main.go: 因為此時 calculate.go 的位置已經改變, 不在main.go的同一層, 所以需要使用模組系統路徑讓編譯器知道位置

package main

import (
  "fmt"
  "helloworld/pkg" // helloworld 是 mod.go 裡面的專案名稱, 後面pkg就是資料夾路徑
)

func adder(a int, b int) int {
  return a + b
}

func sayHello(){
  fmt.Println("hello world")
}

func main(){
  // sayHello()
  fmt.Println( adder(3, 5) )
  fmt.Println( pkg.Sub(10, 6)) // 這邊就需要使用 pkg這個物件去呼叫Sub函式(至於什麼是物件後面詳述)
}

執行

go run . 

之後的預期結果是會看到 4, 如果學習過程有困難歡迎DC找我(yale918#9832)幫debug


上一篇
0x03 函式呼叫
下一篇
0x05 變數宣告
系列文
Go朱尼爾的學習雜記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言